package RRHH_Modelo;

import Conexion.Conexion;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class RHH_HORARIO {

    private int ID;
    private Date HORA_INICIO ;
    private Date HORA_FIN ;
    private String DESCRIPCION;
    private Conexion con = null;

    public RHH_HORARIO(Conexion con) {
        this.con = con;
    }

    public RHH_HORARIO(int ID, Date HORA_INICIO,Date HORA_FIN, String DESCRIPCION) {
        this.ID = ID;
        this.HORA_INICIO = HORA_INICIO;
        this.HORA_FIN = HORA_FIN;
        this.DESCRIPCION = DESCRIPCION;
    }

    public int Insertar() throws SQLException {
        String consulta = "insert into BROKER.RHH_HORARIO(ID, HORA_INICIO, HORA_FIN, DESCRIPCION) VALUES (" + ID +",to_date('"+getHORA_INICIO()+"','dd/MM/yyyy HH24:MI:SS'), to_date('"+getHORA_FIN()+"','dd/MM/yyyy HH24:MI:SS'),'" + DESCRIPCION + "')";
        con.EjecutarSentencia(consulta);
        consulta = "select BROKER.RHH_HORARIO_SEQ.currval as ID from dual";
        ResultSet rs = con.EjecutarConsulta(consulta);
        rs.next();
        return rs.getInt("ID");
    }

    public boolean EliminarXid() {
        try
        {
            String consulta = "delete from BROKER.RHH_HORARIO where ID= " + getID();
            con.EjecutarSentencia(consulta);
            return true;
        }
        catch(Exception e)
        {
            return false;
        }
    }
    
    public RHH_HORARIO BuscarxID(int id) throws SQLException {
        String consulta = "select * from BROKER.RHH_HORARIO where ID= " + id;
        ResultSet rs =con.EjecutarConsulta(consulta);
        List<RHH_HORARIO> lista = Cargar(rs);
        if (lista.size() > 0) 
        {
            return lista.get(0);
        } else {
            return null;
        }
    }

    public List<RHH_HORARIO> Todos() throws SQLException {
        String consulta = "select * from BROKER.RHH_HORARIO";
        ResultSet rs = con.EjecutarConsulta(consulta);        
        List<RHH_HORARIO> lista = Cargar(rs);
        if (lista.size() > 0) 
        {
            return lista;
        } else {
            return null;
        }
    }
    public List<RHH_HORARIO> TodosxUsuarioDiaSesmana(int idcargo, int diasemana) throws SQLException {
        String consulta = "SELECT RHH_HORARIO.*\n" +
                        "FROM BROKER.RHH_HORARIO,\n" +
                        "BROKER.RHH_CARGO_HORARIO,\n" +
                        "BROKER.RHH_CARGO,\n" +
                        "BROKER.RHH_HORARIO_DIA_SEMANA,\n" +
                        "BROKER.RHH_DIAS_SEMANA\n" +
                        "WHERE (RHH_CARGO_HORARIO.ID_HORARIO = RHH_HORARIO.ID)\n" +
                        "AND (RHH_CARGO_HORARIO.ID_CARGO = RHH_CARGO.ID)\n" +
                        "AND (RHH_HORARIO_DIA_SEMANA.ID_HORARIO = RHH_HORARIO.ID)\n" +
                        "AND (RHH_HORARIO_DIA_SEMANA.ID_DIA = RHH_DIAS_SEMANA.ID)\n" +
                        "AND (RHH_DIAS_SEMANA.ID = "+diasemana+")\n" +
                        "AND (RHH_CARGO.ID = "+idcargo+")";
        ResultSet rs = con.EjecutarConsulta(consulta);        
        return Cargar(rs);
    }
    public List<RHH_HORARIO> horarioSinAsignar(int idCargo) throws SQLException {
        String consulta = "SELECT * FROM BROKER.RHH_HORARIO where\n" +
                          "RHH_HORARIO.ID NOT IN (SELECT RHH_HORARIO.ID\n" +
                          "FROM BROKER.RHH_HORARIO, BROKER.RHH_CARGO_HORARIO, BROKER.RHH_CARGO WHERE (RHH_CARGO_HORARIO.ID_HORARIO = RHH_HORARIO.ID)\n" +
                          "AND (RHH_CARGO_HORARIO.ID_CARGO = RHH_CARGO.ID)\n" +
                          "AND (RHH_CARGO.ID = "+idCargo+") )";
        ResultSet rs = con.EjecutarConsulta(consulta);        
        return Cargar(rs);
    }

    public List<RHH_HORARIO> Cargar(ResultSet rs) throws SQLException {
        List<RHH_HORARIO> lista = new ArrayList<RHH_HORARIO>();
        while (rs.next()) {
            RHH_HORARIO objeto = new RHH_HORARIO(con);
            objeto.setID(rs.getInt("ID"));
            objeto.setDESCRIPCION(rs.getString("DESCRIPCION"));
            objeto.setHORA_INICIO(rs.getDate("HORA_INICIO"));
            objeto.setHORA_FIN(rs.getDate("HORA_FIN"));
            lista.add(objeto);
        }
        return lista;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public String getDESCRIPCION() {
        return DESCRIPCION;
    }

    public void setDESCRIPCION(String DESCRIPCION) {
        this.DESCRIPCION = DESCRIPCION;
    }

    public Conexion getCon() {
        return this.con;
    }

    public void setCon(Conexion con) {
        this.con = con;
    }

    public String getHORA_INICIO() {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy HH:mm");
        return formato.format(HORA_INICIO);
    }
    public String getHORA_INICIOSD() {
        SimpleDateFormat formato = new SimpleDateFormat("HH:mm");
        return formato.format(HORA_INICIO);
    }

    public void setHORA_INICIO(Date HORA_INICIO) {
        this.HORA_INICIO = HORA_INICIO;
    }

    public String getHORA_FIN() {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy HH:mm");
        return formato.format(HORA_FIN);
    }
    public String getHORA_FINSD() {
        SimpleDateFormat formato = new SimpleDateFormat("HH:mm");
        return formato.format(HORA_FIN);
    }

    public void setHORA_FIN(Date HORA_FIN) {
        this.HORA_FIN = HORA_FIN;
    }

    public Date getfecha_INICIO() {
        return HORA_INICIO;
    }

    public Date getfecha_FIN() {
        return HORA_FIN;
    }

    
   
   
    
    
}
